package com.example.mypplication;
/**
 *问题描述：
 * 链表翻转。给出一个链表和一个数k，比如，链表为1→2→3→4→5→6，k=2，则翻转后2→1→6→5→4→3，若k=3，翻转后
 * 3→2→1→6→5→4，若k=4，翻转后4→3→2→1→6→5，用程序实现。
 * *  ListNode.next 指向下一个元素
 * * @param head链表的头节点
 * @param n 将前n个节点反转，剩下的节点反转
 * * @return 翻转后链表的头节点
 */
public class TextT1 {

    private ListNode hear;

    /**
     * 初始化新增ListNode元素
     * @param value
     */
    public void addListNode(int value){
        ListNode listNode = new ListNode(value);
        if(hear==null){
            hear = listNode;
            return;
        }
        ListNode current = hear;
        while (current.next!=null){
            current = current.next;
        }
        current.next = listNode;
    }

    /**
     *
     * @param n
     */
    public void inputNumToRollBack(int n){
        ListNode prev = null;
        ListNode current = hear;

        while (current.next!=null && n>0){
            ListNode next = current.next;//保存下一个，作为前面翻转的数据
            current.next = prev;//下一个变成前面一个数据

            prev = current;//前面的数据变成当前
            current = next;//当前的数据变成下一个
            n--;
        }
        hear = prev;
    }

    public void outPutListNode(){
        ListNode current = hear;
        if(current==null){
            System.out.println("空链接");
            return;
        }
        while (current.next!=null){
            System.out.print(current.value);
            current = current.next;
            if(current.next!=null){
                System.out.print("→");
            }
        }
        System.out.println("");
    }


}
